12μ₯ ν¨μ
12.1 ν¨μλ?
- μνμ ν¨μλ βμ λ ₯βμ λ°μ βμΆλ ₯βμ λ΄λ³΄λ΄λ μΌλ ¨μ κ³Όμ μ μ μν κ²μ΄λ€.
- νλ‘κ·Έλλ° μΈμ΄μ ν¨μλ μνμ ν¨μμ κ°μ κ°λ μ΄λ€.
- νλ‘κ·Έλλ° μΈμ΄μ ν¨μλ μΌλ ¨μ κ³Όμ μ λ¬Έ(statement)μΌλ‘ ꡬννκ³ μ½λ λΈλ‘μΌλ‘ κ°μΈμ νλμ μ€ν λ¨μλ‘ μ μν κ²μ΄λ€.
- 맀κ°λ³μ : ν¨μ λ΄λΆλ‘ μ λ ₯μ μ λ¬λ°λ λ³μ
- μΈμ : μ λ ₯
- λ°νκ° : μΆλ ₯
- ν¨μλ ν¨μ μ μλ₯Ό ν΅ν΄ μμ±νλ€.
- ν¨μ μ μλ§μΌλ‘ ν¨μκ° μ€νλλ κ²μ μλλ€.
- μΈμλ₯Ό 맀κ°λ³μλ₯Ό ν΅ν΄ ν¨μμ μ λ¬νλ©΄μ ν¨μμ μ€νμ λͺ μμ μΌλ‘ μ§μν΄μΌ νκ³ , μ΄λ₯Ό ν¨μ νΈμΆμ΄λΌκ³ νλ€.
12.2 ν¨μλ₯Ό μ¬μ©νλ μ΄μ
- ν¨μλ λͺ λ²μ΄λ νΈμΆν μ μμΌλ―λ‘ μ½λμ μ¬μ¬μ©μ΄λΌλ μΈ‘λ©΄μμ λ§€μ° μ μ©νλ€.
- κ°μ μ½λλ₯Ό μ€λ³΅ν΄μ μ¬λ¬ λ² μμ±νλ©΄ μ½λ μμ μ 걸리λ μκ°λ μ¦κ°νκ³ , ν΄λ¨Ό μλ¬μ λ°μ κ°λ₯μ±λ λμμ§λ€.
- ν¨μμ μ¬μ©μ μ½λ μ€λ³΅μ μ΅μ νλ―λ‘ μ μ§λ³΄μμ νΈμμ±μ λμ΄κ³ μ€μλ₯Ό μ€μ¬ μ½λμ μ λ’°μ±μ λμ΄λ ν¨κ³Όκ° μλ€.
- μ μ ν ν¨μ μ΄λ¦μ λ΄λΆ μ½λλ₯Ό μ΄ν΄νμ§ μκ³ λ ν¨μμ μν μ νμ ν μ μκ³ , μ΄λ μ½λμ κ°λ μ±μ ν₯μμν¨λ€.
- μ½λμ μ¬μ¬μ©
- μ μ§λ³΄μμ νΈμμ±
- μ½λμ μ λ’°μ±
- μ½λμ κ°λ μ±
12.3 ν¨μ 리ν°λ΄
- μλ°μ€ν¬λ¦½νΈμ ν¨μλ κ°μ²΄ νμ μ κ°μ΄λ€.
[!note] > ν¨μ 리ν°λ΄μ κ΅¬μ± μμ
- ν¨μ μ΄λ¦
- 맀κ°λ³μ λͺ©λ‘
- 맀κ°λ³μ λͺ©λ‘μ
μμ
μ μλ―Έκ° μλ€.- 맀κ°λ³μλ ν¨μ λͺΈμ²΄ λ΄μμ λ³μμ λμΌνκ² μ·¨κΈ,
λ€μ΄λ° κ·μΉ
μ μ€μν΄μΌνλ€.- ν¨μ λͺΈμ²΄
- ν¨μ λͺΈμ²΄λ
ν¨μ νΈμΆ
μ μν΄ μ€νλλ€.
- 리ν°λ΄μ κ°μ μμ±νκΈ° μν νκΈ°λ²μ΄λ€.
- ν¨μ리ν°λ΄λ νκ°λμ΄ κ°μ μμ±νλ©°, μ΄ κ°μ κ°μ²΄λ€.
-
μ¦, ν¨μλ κ°μ²΄λ€.
- μΌλ° κ°μ²΄λ νΈμΆν μ μμ§λ§ ν¨μλ νΈμΆν μ μλ€.
- ν¨μ κ°μ²΄λ μΌλ° κ°μ²΄μλ μλ κ³ μ ν νλ‘νΌν°λ₯Ό κ°λλ€. (prototype, length, name, arguments λ±λ±β¦)
12.4 ν¨μ μ μ
- ν¨μλ₯Ό μ μνλ λ°©λ²μ 4κ°μ§κ° μλ€.
- ν¨μ μ μΈλ¬Έμ΄ νκ°λλ©΄ μλ³μκ° μ묡μ μΌλ‘ μμ±λκ³ ν¨μ κ°μ²΄κ° ν λΉλλ€.
- λ³μλ μ μΈ, ν¨μλ μ μ
12.4.1 ν¨μ μ μΈλ¬Έ
- ν¨μ μ μΈλ¬Έμ ν¨μ 리ν°λ΄κ³Ό ννκ° λμΌνλ€.
- λ¨, ν¨μ 리ν°λ΄μ ν¨μ μ΄λ¦μ μλ΅ν μ μμΌλ ν¨μ μ μΈλ¬Έμ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€.
- ν¨μ μ μΈλ¬Έμ ννμμ΄ μλ λ¬Έμ΄λ€.
- μ¦, κ°μΌλ‘ νκ°λμ§ μμΌλ―λ‘ λ³μμ ν λΉν μ μλ€.
var add = function add(x, y) {
return x + y;
};
Q. μ₯ μ μ½λ 보면 ν¨μ μ μΈλ¬Έ λ³μμ ν λΉνκ³ μλκ±° μλκ°μ A. λκ°μ΄ μκ²Όμ§λ§ μλ°μ€ν¬λ¦½νΈ μμ§μ μλ₯Ό ν¨μ μ μΈλ¬Έμ΄ μλ ν¨μ 리ν°λ΄ ννμμΌλ‘ ν΄μνλ€.
{ }
λ λΈλ‘λ¬ΈμΌ μλ μκ³ , κ°μ²΄ 리ν°λ΄μΌ μλ μλ€. μλ°μ€ν¬λ¦½νΈ μμ§μ λ¬Έλ§₯μ λ°λΌ ν΄μνλ€.- κΈ°λͺ ν¨μ 리ν°λ΄λ ν¨μ μ μΈλ¬ΈμΌ μλ μκ³ , ν¨μ 리ν°λ΄ ννμμΌ μλ μλ€. λ¬Έλ§₯μ λ°λΌ ν΄μλλ€. (κ°μ΄ λμ΄μΌ νλ μ리μμλ ννμ, μλ κ³³μμ μ μΈλ¬Έ)
function foo() {
console.log("foo");
}
foo()(
// foo
function bar() {
console.log("bar");
}
);
bar(); // ReferenceError: bar is not defined
- μλ ν¨μ μ μΈλ¬Έμ΄κ³ , μλλ ν¨μ 리ν°λ΄ ννμμ΄λ€.
Q. μ₯ λκ°μ΄ μκ²Όλλ° μλλ μ ν¨μ 리ν°λ΄ ννμμΈκ°μ
A. ( )
λ κ·Έλ£Ή μ°μ°μμ΄κ³ , μμͺ½μ ννμ(κ°)μ μ리μ΄λ€. λ°λΌμ μλμͺ½μ ν¨μ 리ν°λ΄ ννμμ΄λ€.
- μμ ν¨μ 리ν°λ΄μμ μ΄ν΄λ΄€λ―μ΄, ν¨μ μ΄λ¦μ ν¨μ λͺΈμ²΄ λ΄μμλ§ μ°Έμ‘°ν μ μλ μλ³μμ΄λ€.
Q. μ₯ κ·ΈλΌ λ³μμ ν λΉνμ§ μλ μ΄μ ν¨μ νΈμΆ λͺ»νλμ
A. ν¨μ μ μΈλ¬Έ
μ μ΄μ©νλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ묡μ μΌλ‘ ν¨μ μ΄λ¦κ³Ό κ°μ μλ³μλ₯Ό μμ±νκ³ ν¨μ κ°μ²΄λ₯Ό ν λΉν΄μ€λ€.
- λ°λΌμ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μΈν μμͺ½ ν¨μ(foo)λ νΈμΆμ΄ κ°λ₯νμ§λ§, ν¨μ 리ν°λ΄ ννμμΌλ‘ μ μΈν μλμͺ½(bar)ν¨μλ ν¨μλ₯Ό κ°λ¦¬ν€λ μλ³μκ° μμ΄
ReferenceError
λ₯Ό 보μΈλ€. - μ λ΄μ©μ 보면 μκ² μ§λ§, ν¨μ νΈμΆμ ν¨μ μ΄λ¦μΌλ‘ νΈμΆνλ κ²μ΄ μλλΌ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ‘ νΈμΆνλ€.
- ν¨μ μ΄λ¦κ³Ό λ³μ μ΄λ¦μ΄ κ°μ ν¨μ μ΄λ¦μΌλ‘ νΈμΆλλ λ―νμ§λ§ μ¬μ€μ μλ³μλ‘ νΈμΆλ κ²μ΄λ€.
- κ²°λ‘ μ μΌλ‘ μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ μΈλ¬Έμ ν¨μ ννμμΌλ‘ λ³νν΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ€κ³ μκ°ν μ μλ€.
- λ¨ μ νν λμΌνκ² λμνλ κ²μ μλλ€.
12.4.2 ν¨μ ννμ
var add = function (x, y) {
return x + y;
};
console.log(add(2, 5)); // μλ³μλ‘ νΈμΆ! μ¬κΈ°μ ν¨μ μ΄λ¦μ μ‘΄μ¬νμ§λ μλλ€. (μ΅λͺ
ν¨μ)
-
ν¨μλ κ°μ²΄λ€.
- μλ°μ€ν¬λ¦½νΈμ ν¨μλ κ°μ²λΌ λ³μμ ν λΉν μλ μκ³ νλ‘νΌν° κ°μ΄ λ μλ μμΌλ©° λ°°μ΄μ μμκ° λ μλ μλ€.
- μ΄μ²λΌ κ°μ μ±μ§μ κ°λ κ°μ²΄λ₯Ό
μΌκΈ κ°μ²΄
λΌ νκ³ , μλ°μ€ν¬λ¦½νΈμ ν¨μλ μΌκΈ κ°μ²΄μ΄λ€. - ν¨μκ° μΌκΈ κ°μ²΄(κ°)μ΄λΌλ κ²μ ν¨μ 리ν°λ΄λ‘ μμ±ν ν¨μ κ°μ²΄λ₯Ό λ³μμ ν λΉν μ μλ€λ κ²μ΄λ€.
- μ΄λ¬ν ν¨μ μ μ λ°©μμ ν¨μ ννμμ΄λΌ νλ€.
- ν¨μ ννμμ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€. (μ΄μ°¨νΌ κ°μΌλ‘ νκ°λΌ λ³μμ ν λΉλλ―λ‘)
- ν¨μ μ μΈλ¬Έμ κ°μΌλ‘ νκ°λμ§ μμ λ³μμ ν λΉν μ μμμΌλ―λ‘ ν¨μ μ΄λ¦μ μλ΅ν μ μμλ€. (ν¨μ μ΄λ¦μ μμ±ν΄μΌλ§ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ κ·Έκ±Έ λ³΄κ³ μ묡μ μΌλ‘ μλ³μ μμ± ν ν λΉν΄μ€ μ μμΌλ―λ‘)
12.4.3 ν¨μ μμ± μμ κ³Ό ν¨μ νΈμ΄μ€ν
// ν¨μ μ°Έμ‘°
console.dir(add); // f add(x, y)
console.dir(sub); // undefined
// ν¨μνΈμΆ
console.log(add(2, 5); // 7
console.log(sub(2, 5); // TypeError: sub is not a function
// ν¨μ μ μΈλ¬Έ
function add(x, y) {
return x + y;
}
//ν¨μ ννμ
var sub = function (x, y) {
return x - y;
};
-
ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν ν¨μλ ν¨μ μ μΈλ¬Έ μ΄μ μ νΈμΆν μ μλ€.
-
ν¨μ ννμμΌλ‘ μ μν ν¨μλ ν¨μ ννμ μ΄μ μ νΈμΆν μ μλ€.
-
λͺ¨λ μ μΈλ¬Έμ΄ κ·Έλ λ― ν¨μ μ μΈλ¬Έλ λ°νμ μ΄μ μ λ¬Έλ§₯ νμ±(μ€ν 컨ν μ€νΈ)μ μν΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ λ¨Όμ μ€νλΌ ν¨μ κ°μ²΄κ° μμ±λκ³ , μ묡μ μΌλ‘ μμ±λ μλ³μμ ν λΉλλ€.
-
μ¦ λ°νμμ μ΄λ―Έ ν¨μ κ°μ²΄κ° μμ±λκ³ μλ³μμ ν λΉκΉμ§ μλ£λ μνμ΄λ―λ‘ ν¨μ μ μΈλ¬Έ μ΄μ μ ν¨μλ₯Ό μ°Έμ‘°νκ±°λ νΈμΆν μλ μλ€.
-
μ΄μ²λΌ ν¨μ μ μΈλ¬Έμ΄ μ½λμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ μλ°μ€ν¬λ¦½νΈ κ³ μ μ νΉμ§μ
ν¨μ νΈμ΄μ€ν
μ΄λΌ νλ€.[!note] > ν¨μ νΈμ΄μ€ν vs λ³μ νΈμ΄μ€ν
- λ°νμ μ΄μ μ λ¬Έλ§₯ νμ±μ μν΄ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ λ¨Όμ μ€νν΄ μλ³μλ₯Ό μμ±νλ€λ μ μμλ λμΌ
- λ³μλ λ¨Όμ
undefined
λ‘ μ΄κΈ°νλκ³ , μ΄ν λ°νμμμ κ° ν λΉ - ν¨μλ ν¨μ κ°μ²΄ μμ± λ° μ묡μ μλ³μλ‘ ν λΉκΉμ§ λ§μΉ¨
-
ν¨μ ννμμ λ³μμ ν λΉλλ κ°μ΄ ν¨μ 리ν°λ΄μΈ λ¬Έμ΄λ€.
-
λ°λΌμ λ°νμμ νκ°λκΈ° μ κΉμ§λ
undefined
λ‘ μ΄κΈ°ν λμ΄μκ³ , ν¨μ ννμ μ΄μ μ ν¨μλ₯Ό νΈμΆνλ©΄TypeError
κ° λ°μνλ€. -
ν¨μ ννμμΌλ‘ μ μν ν¨μλ λ°λμ ν¨μ ννμ μ΄νμ μ°Έμ‘° λλ νΈμΆν΄μΌ νλ€.
12.4.4 Function μμ±μ ν¨μ
var add = new Function("x", "y", "return x + y");
- κ°μ²΄λ₯Ό μμ±νλ ν¨μμΈ μμ±μ ν¨μλ₯Ό μ΄μ©νλ©΄ ν¨μ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
- νμ§λ§ μ΄λ κ² μμ±ν ν¨μλ
ν΄λ‘μ
λ₯Ό μμ±νμ§ μλ λ± ν¨μ μ μΈλ¬Έμ΄λ ν¨μ ννμμΌλ‘ μμ±ν ν¨μμ λ€λ₯΄κ² λμνλ€. - λ°λΌμ μ΄λ κ² ν¨μλ₯Ό μμ±νλ λ°©μμ μΌλ°μ μ΄μ§λ μκ³ λ°λμ§νμ§λ μλ€.
12.4.5 νμ΄ν ν¨μ
const add = (x, y) => x + y;
- ES6μμ λμ
λ νμ΄ν ν¨μλ
function
ν€μλ λμ νμ΄ν=>
λ₯Ό μ¬μ©ν΄ κ°λ΅ν λ°©λ²μΌλ‘ ν¨μλ₯Ό μ μΈν μ μλ€. - νμ΄ν ν¨μλ νμ μ΅λͺ ν¨μλ‘ μ μνλ€.
- νμ΄ν ν¨μλ λ΄λΆ λμ λν κ°λ΅ν λμ΄ μλ€.
- μμΈν 건 λμ€μ μ΄ν΄λ³΄μ.^^
12.5 ν¨μ νΈμΆ
12.5.1 맀κ°λ³μμ μΈμ
- ν¨μλ₯Ό μ€ννκΈ° μν΄ νμν κ°μ μΈλΆμμ ν¨μ λ΄λΆλ‘ μ λ¬ν νμκ° μλ κ²½μ°, 맀κ°λ³μ(μΈμ)λ₯Ό ν΅ν΄ μΈμλ₯Ό μ λ¬νλ€.
- μΈμλ κ°μΌλ‘ νκ°λ μ μλ ννμμ΄μ΄μΌ νλ€.
- ν¨μκ° νΈμΆλλ©΄ ν¨μ λͺΈμ²΄ λ΄μμ μ묡μ μΌλ‘ 맀κ°λ³μκ° μμ±λκ³ μΌλ° λ³μμ λ§μ°¬κ°μ§λ‘
undefined
λ‘ μ΄κΈ°νλ μ΄ν μΈμκ° μμλλ‘ ν λΉλλ€. - 맀κ°λ³μμ μ€μ½ν(μ ν¨λ²μ)λ ν¨μ λ΄λΆλ€.
function add(x, y) {
return x + y;
}
console.log(add(2)); //NaN
- ν¨μλ 맀κ°λ³μμ κ°μμ μΈμμ κ°μκ° μΌμΉνλμ§ μ²΄ν¬νμ§ μλλ€. (μλ¬ λ°μ X)
- μΈμκ° λΆμ‘±ν΄μ μΈμκ° ν λΉλμ§ μμ 맀κ°λ³μμ κ°μ
undefined
μ΄λ€. 2 + undefined == NaN
- 맀κ°λ³μλ³΄λ€ μΈμκ° λ λ§μ κ²½μ° μ΄κ³Όλ μΈμλ 무μλλ€.
- λͺ¨λ μΈμλ μ묡μ μΌλ‘
arguments
κ°μ²΄μ νλ‘νΌν°λ‘ 보κ΄λλ€.
function sum() {
let result = 0;
for (let i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
}
console.log(sum()); // 0
console.log(sum(1)); // 1
console.log(sum(1, 2)); // 3
console.log(sum(1, 2, 3)); // 6
arguments
κ°μ²΄λ₯Ό νμ©ν κ°λ³ μΈμ ν¨μ μμ
function sum(...args) {
return args.reduce((pre, cur) => pre + cur, 0);
}
console.log(sum()); // 0
console.log(sum(1)); // 1
console.log(sum(1, 2)); // 3
console.log(sum(1, 2, 3)); // 6
λ³΄ν΅ Rest νλΌλ―Έν°λ₯Ό μ΄μ©ν΄ μ΄λ°μμΌλ‘ ꡬννλ κ²½μ°κ° λ λ§μλ κ² κ°λ€.
12.5.2 μΈμ νμΈ
function add(x, y) {
return x + y;
}
console.log(add(2)); // NaN
console.log(add("a", "b")); // 'ab'
- μλ°μ€ν¬λ¦½νΈ ν¨μλ 맀κ°λ³μμ μΈμμ κ°μκ° μΌμΉνλμ§ νμΈνμ§ μλλ€.
- μλ°μ€ν¬λ¦½νΈλ λμ νμ μΈμ΄λ€. λ°λΌμ μλ°μ€ν¬λ¦½νΈ ν¨μλ 맀κ°λ³μμ νμ μ μ¬μ μ μ§μ ν μ μλ€.
- νμ κ²μ¬ λλ μΈμ κ°μ νμΈνλ μ½λλ₯Ό μμ±νκ±°λ 맀κ°λ³μ κΈ°λ³Έκ°μ ν΅ν΄ μ‘°κΈ λ μμ ν μ½λ μμ± κ°λ₯
- νμ μ€ν¬λ¦½νΈλ₯Ό λμ ν΄ μ»΄νμΌ μμ μ λΆμ μ ν νΈμΆ λ°©μ§νλ λ°©λ²λ μλ€.
12.5.3 맀κ°λ³μμ μ΅λ κ°μ
- ECMAScript μ¬μμμλ 맀κ°λ³μμ μ΅λ κ°μμ λν΄ λͺ μμ μΌλ‘ μ ννκ³ μμ§ μλ€.
- 맀κ°λ³μμ κ°μλ μ μμλ‘ μ’μΌλ©°, 맀κ°λ³μμ κ°μλ₯Ό μ€μ¬ ν¨μκ° ν κ°μ§ μΌλ§ νκ² λ§λ€μ΄μΌνλ€.
$.ajax({
method: "POST",
url: "/user",
data: { id: 1, name: "Lee" },
cache: false,
});
- 3κ° μ΄μμ 맀κ°λ³μκ° νμνλ©΄ νλμ 맀κ°λ³μλ₯Ό μ μΈνκ³ κ°μ²΄λ₯Ό μΈμλ‘ μ λ¬νλ κ²μ΄ μ 리νλ€.
12.5.4 λ°νλ¬Έ
- ν¨μλ return ν€μλμ ννμ(λ°νκ°) μΌλ‘ μ΄λ€μ§ λ°νλ¬Έμ μ¬μ©ν΄ μ€ν κ²°κ³Όλ₯Ό ν¨μ μΈλΆλ‘ λ°ν(return)ν μ μλ€.
var result = multiply(3, 5);
- ν¨μ νΈμΆμ ννμμ΄λ€.
[!note] > λ°νλ¬Έμ λ κ°μ§ μν
- ν¨μ μ€ν μ€λ¨
- ννμ νκ° ν λ°ν
- λ°νλ¬Έμ μλ΅νλ©΄ ν¨μλ μ묡μ μΌλ‘
undefined
λ₯Ό λ°ννλ€.
12.6 μ°Έμ‘°μ μν μ λ¬κ³Ό μΈλΆ μνμ λ³κ²½
// 맀κ°λ³μ primitiveλ μμκ°μ μ λ¬λ°κ³ , 맀κ°λ³μ objλ κ°μ²΄λ₯Ό μ λ¬λ°λλ€.
function changeVal(primitive, obj) {
primitive += 100;
obj.name = "Kim";
}
// μΈλΆ μν
var num = 100;
var person = { name: "Lee" };
console.log(num); // 100
console.log(person); // {name: "Lee"}
// μμκ°μ κ° μμ²΄κ° λ³΅μ¬λμ΄ μ λ¬λκ³ κ°μ²΄λ μ°Έμ‘°κ°μ΄ 볡μ¬λμ΄ μ λ¬λλ€.
changeVal(num, person);
// μμκ°μ μλ³Έμ΄ νΌμλμ§ μλλ€.
console.log(num); // 100
// κ°μ²΄λ μλ³Έμ΄ νΌμλλ€.
console.log(person); // {name: "Kim"}
- μμ νμ μΈμλ κ° μμ²΄κ° λ³΅μ¬λμ΄ λ§€κ°λ³μμ μ λ¬λκΈ° λλ¬Έμ ν¨μ λͺΈμ²΄μμ κ·Έ κ°μ λ³κ²½(μ¬ν λΉμ ν΅ν κ΅μ²΄)ν΄λ μλ³Έμ νΌμλμ§ μλλ€.
- κ°μ²΄ νμ μΈμλ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ λ§€κ°λ³μμ μ λ¬λκΈ° λλ¬Έμ ν¨μ λͺΈμ²΄μμ μ°Έμ‘° κ°μ ν΅ν΄ κ°μ²΄λ₯Ό λ³κ²½ν κ²½μ° μλ³Έμ΄ νΌμλλ€.
- ν¨μκ° μΈλΆ μνλ₯Ό λ³κ²½νλ©΄ μν λ³νλ₯Ό μΆμ νκΈ° μ΄λ €μμ§λ€.
- κ°μ²΄μ λ³κ²½μ μΆμ νλ €λ©΄ μ΅μ λ² ν¨ν΄ λ±μ μ΄μ©
- λλ κ°μ²΄λ₯Ό λΆλ³ κ°μ²΄λ‘ λ§λ€μ΄ μ΄μ©
- μΈλΆ μνλ₯Ό λ³κ²½νμ§ μκ³ μΈλΆ μνμ μμ‘΄νμ§λ μλ ν¨μλ₯Ό μμ ν¨μλΌ νλ€.
- μμ ν¨μλ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ μμ μ±μ λμ΄λ €λ νλ‘κ·Έλλ° ν¨λ¬λ€μμ ν¨μν νλ‘κ·Έλλ°μ΄λΌ νλ€.
12.7 λ€μν ν¨μμ νν
12.7.1 μ¦μ μ€ν ν¨μ
// μ΅λͺ
μ¦μ μ€ν ν¨μ
(function () {
var a = 3;
var b = 5;
return a * b;
})();
- ν¨μ μ μμ λμμ μ¦μ νΈμΆλκ³ λ€μ νΈμΆν μ μλ ν¨μλ₯Ό μ¦μ μ€ν ν¨μλΌ νλ€.
- μλ μ μ μ μ€μ½ν μ€μΌ λ°©μ§, λ°μ΄ν° μΊ‘μν λ±λ± λλ¬Έμ μ’ μ’ μΌμ§λ§ ES6 μ΄νλ‘λ μ μμ΄λ€.
12.7.2 μ¬κ· ν¨μ
function countdown(n) {
if (n < 0) return;
console.log(n);
countdown(n - 1); // μ¬κ· νΈμΆ
}
- λ°λ³΅ μ²λ¦¬λ₯Ό μν΄ ν¨μκ° μκΈ° μμ μ νΈμΆνλ ν¨μλ₯Ό μ¬κ· ν¨μλΌ νλ€.
// ν¨μ ννμ
var factorial = function foo(n) {
// νμΆ μ‘°κ±΄: nμ΄ 1 μ΄νμΌ λ μ¬κ· νΈμΆμ λ©μΆλ€.
if (n <= 1) return 1;
// ν¨μλ₯Ό κ°λ¦¬ν€λ μλ³μλ‘ μκΈ° μμ μ μ¬κ· νΈμΆ
return n * factorial(n - 1);
// ν¨μ μ΄λ¦μΌλ‘ μκΈ° μμ μ μ¬κ· νΈμΆν μλ μλ€.
// console.log(factorial === foo); // true
// return n * foo(n - 1);
};
- ν¨μ λͺΈμ²΄ λ΄λΆμμλ ν¨μ μ΄λ¦μΌλ‘λ μκΈ° μμ μ μ¬κ· νΈμΆν μλ μλ€.
- μ¬κ· ν¨μ λ΄μλ νμΆ μ‘°κ±΄μ λ°λμ λ§λ€μ΄μΌνλ€.
12.7.3 μ€μ²© ν¨μ
function outer() {
var x = 1;
// μ€μ²© ν¨μ
function inner() {
var y = 2;
// μΈλΆ ν¨μμ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
console.log(x + y); // 3
}
inner();
}
outer();
- ν¨μ λ΄λΆμ μ μλ ν¨μλ₯Ό μ€μ²© ν¨μ λλ λ΄λΆ ν¨μλΌ νλ€.
- μ€μ²© ν¨μλ₯Ό ν¬ν¨νλ ν¨μλ μΈλΆ ν¨μλΌ λΆλ₯Έλ€.
[!note] ES6λΆν°λ ν¨μ μ μΈλ¬ΈμΒ
if
λ¬Έμ΄λΒfor
λ¬Έ λ±μ μ½λ λΈλ‘ λ΄μμλ μ μν μ μλ€.
λ¨, νΈμ΄μ€ν μΌλ‘ μΈν΄ νΌλμ΄ λ°μν μ μμΌλ―λ‘ λ°λμ§νμ§ μλ€.
μ€μ²© ν¨μλΒν΄λ‘μ
μ κ΄λ ¨μ΄ μλ€.
12.7.4 μ½λ°± ν¨μ
repeat(5, function (i) {
if (i % 2) console.log(i);
}); // 1 3
- ν¨μμ 맀κ°λ³μλ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μμ λ΄λΆλ‘ μ λ¬λλ ν¨μλ₯Ό μ½λ°± ν¨μλΌκ³ νλ€.
- λ§€κ° λ³μλ₯Ό ν΅ν΄ ν¨μμ μΈλΆμμ μ½λ°± ν¨μλ₯Ό μ λ¬λ°μ ν¨μλ₯Ό κ³ μ°¨ ν¨μλΌκ³ νλ€.
- κ³ μ°¨ ν¨μλ 맀κ°λ³μλ₯Ό ν΅ν΄ μ λ¬λ°μ μ½λ°± ν¨μμ νΈμΆ μμ μ κ²°μ ν΄μ νΈμΆνλ€.
- μ½λ°±ν¨μλ ν¨μν νλ‘κ·Έλλ° ν¨λ¬λ€μ λΏλ§ μλλΌ λΉλκΈ°μ²λ¦¬(μ΄λ²€νΈ μ²λ¦¬, Ajax ν΅μ , νμ΄λ¨Έ ν¨μ λ±) μ νμ©λλ μ€μν ν¨ν΄μ΄λ€.
12.7.5 μμ ν¨μμ λΉμμ ν¨μ
- μ΄λ€ μΈλΆ μνμ μμ‘΄νμ§λ μκ³ λ³κ²½νμ§λ μλ ν¨μλ₯Ό μμ ν¨μλΌκ³ νλ€.
- μΈλΆ μνμ μμ‘΄νκ±°λ μΈλΆ μνλ₯Ό λ³κ²½νλ ν¨μλ₯Ό λΉμμ ν¨μλΌκ³ νλ€.
- μμ ν¨μλ λμΌν μΈμκ° μ λ¬λλ©΄ μΈμ λ λμΌν κ°μ λ°ννλ€.
[!note] > ν¨μν νλ‘κ·Έλλ°μ μμ ν¨μμ 보쑰 ν¨μμ μ‘°ν©μ ν΅ν΄ μΈλΆ μνλ₯Ό λ³κ²½νλ λΆμ ν¨κ³Όλ₯Ό μ΅κ³ νν΄μ λΆλ³μ±μ μ§ν₯νλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€.